package main

import "fmt"

/**
Go 在不同类型的变量直接赋值时需要显式转换，并且只有显式转换（强制转换）
语法：
	表达式：T(v) 将值v 转换为类型 T
	T：就是数据类型
	v：就是需要转换的变量
*/
func main() {

	zz := 2.1
	fmt.Printf("zz的类型是%T = %v \n", zz, zz)

	// 进行类型转换
	var a int = 10000
	// 在这里自动转换不好使
	// var b float32 = a
	fmt.Println(a)

	var c float32 = float32(a)
	fmt.Println(c)

	// 注意：a的类型其实还是int，只是将a的值转换为float32
	fmt.Printf("a的类型: %T", a)
	fmt.Println()
	fmt.Printf("c的类型: %T", c)
	fmt.Println()

	// 将int64转为int的时候，编译不会报错，但是会有数据的溢出
	var d int64 = 88888
	var e int8 = int8(d) // 56 d的值不一样，转换结果也不一样
	fmt.Println("把int64【88888】转为int8，数据会溢出；结果：", e)

	//
	var f int32 = 12
	var g int32 = f + 30 // 一定要匹配=左右的数据类型
	fmt.Println(g)

	var h int64 = 12
	var i int8 = int8(h) + 127 // -117 编译通过 ，但结果可能会溢出
	//var j int8 = int8(h) + 128 // 编译不通过
	fmt.Println(i)
	//fmt.Println(j)

}
